package com.leetcode.string;


/**
 * 字符串中的第一个唯一字符
 * 给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 *
 * 示例：
 * s = "leetcode"
 * 返回 0
 *
 * s = "loveleetcode"
 * 返回 2
 *
 * 提示：你可以假定该字符串只包含小写字母。
 * 作者：力扣 (LeetCode)
 * 链接：https://leetcode-cn.com/leetbook/read/top-interview-questions/xaph0j/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 * @author ymy
 * @date 2021年09月02日 16:42
 */
class Code387 {
    public static void main(String[] args) {
        String s = "aabb";
        int i = firstUniqChar1(s);
        System.out.println(i);
    }
    public static int firstUniqChar1(String s) {
        char[] chars=s.toCharArray();
        int[] arr = new int[26];
        int min = Integer.MAX_VALUE-2;
        for(int i=0;i<26;i++){
            arr[i] = Integer.MAX_VALUE;
        }
        for(int i = 0;i<chars.length;i++){
            arr[chars[i]-'a'] = arr[chars[i]-'a'] == Integer.MAX_VALUE ? i : Integer.MAX_VALUE-1;
        }
        for(int i=0;i<26;i++){
            min = arr[i]<min ? arr[i] : min;
        }
        return min == Integer.MAX_VALUE-2 ? -1 : min;
    }

    public static int firstUniqChar2(String s) {
        int[] count=new int[26];
        char[] chars=s.toCharArray();
        for(char ch:chars){
            count[ch-'a']++;
        }
        for(int m=0;m<chars.length;m++){
            if(count[chars[m]-'a']==1){
                return m;
            }
        }
        return -1;
    }
}
